package com.dkd.sbtz.service;

import java.util.List;
import java.util.Map;

import com.dkd.common.core.domain.TreeSelect;
import com.dkd.common.core.domain.entity.SysDept;
import com.dkd.sbtz.domain.AssetNodeUsage;
import com.dkd.sbtz.domain.Sbtz;
import com.dkd.sbtz.domain.vo.*;
import com.dkd.sbtz.domain.vo.nodeImport.SbtzExtImportDTO;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.Valid;

/**
 * 设备台账Service接口
 * 
 * @author xzj
 * @date 2025-09-02
 */
public interface ISbtzService 
{
    /**
     * 查询设备台账
     * 
     * @param id 设备台账主键
     * @return 设备台账
     */
    public Sbtz selectSbtzById(Long id);

    /**
     * 查询设备台账列表
     * 
     * @param sbtz 设备台账
     * @return 设备台账集合
     */
    public List<Sbtz> selectSbtzList(Sbtz sbtz);

    /**
     * 新增设备台账
     * 
     * @param sbtz 设备台账
     * @return 结果
     */
    public int insertSbtz(Sbtz sbtz);

    /**
     * 修改设备台账
     * 
     * @param sbtz 设备台账
     * @return 结果
     */
    public int updateSbtz(Sbtz sbtz);

    /**
     * 批量删除设备台账
     * 
     * @param ids 需要删除的设备台账主键集合
     * @return 结果
     */
    public int deleteSbtzByIds(Long[] ids);

    /**
     * 删除设备台账信息
     * 
     * @param id 设备台账主键
     * @return 结果
     */
    public int deleteSbtzById(Long id);

    List<Long> createRoute(RouteCreateDTO dto, String operUser);

    /** 懒加载父节点选择 */
//    List<NodeOptionVO> loadChildren(Long parentId);

    List<NodeOptionVO> children(Long parentId);

    Long rehomeByRecreate(RehomeByRecreateDTO req, String operUser);

//    List<AssetNodeListVO> selectSbtzListVO(Sbtz sbtz);
    List<Sbtz> selectSbtzListVO(Sbtz sbtz);

    List<AssetNodeListVO> selectSearchData(Sbtz sbtz);

    int deleteSubtree(Long id, String operUser);

    /** 根据查询条件返回导出数据（含 fullPath） */
    List<AssetNodeExportVO> selectForExport(Sbtz q);

    List<ExportWithParentVO> selectChainRowsForExport(Sbtz q);



    public List<TreeSelect> selectAssetTreeList(Sbtz sbtz);

    public List<AssetNodeUsage> selectNodeUsageList(AssetNodeUsage nodeUsage);
    List<AssetNodeUsage> selectNodeUsageById(Long nodeId);




    String importExtFields(List<SbtzExtImportDTO> rows, boolean onlyWhenSpecEmpty, boolean ignoreBlank);


    /*测试导入数据*/
    /** 返回导入摘要字符串 */
    String importExcel(MultipartFile file) throws Exception;
    /*测试导入数据end*/



    public List<Long> createMachines(RouteCreateDTO dto, String operUser);


    List<NodeOptionVO> getPathByLeaf(Long leafId);


    boolean checkBeTypeFirst(Map<String, Object> params);

    public String processAssetHash(String specification, String model, String material, String brand, String manufacturer);
}
